這次的內容是了解冒泡事件
以及capture
、bubble
和once
這三個方法
作品實做
capture
、bubble
和once
運作原理<div class="one">
<div class="two">
<div class="three"></div>
</div>
</div>
<button>請點擊我!</button>
capture
、bubble
和once
運作原理 const divs = document.querySelectorAll('div');
const button = document.querySelector('button');
divs.forEach((div) => {
div.addEventListener("click", clickHandler, {
capture: true, //監聽冒泡,false為由內而外監聽,監聽capture,True為由外而內
// once: true, //只執行一次
});
});
function clickHandler(e) {
// e.stopPropagation(); //停止冒泡
console.log(this.classList.value);
}
button.addEventListener(
"click",
() => {
console.log("你點擊到了!");
},
{ once: true }
);
e.addEventListener(event, func , {capture: false, once: true})
總共有三個參數:
event
為我們所要監聽的事件
func
當監聽到事件時觸發的動作(函式)
{capture: false, once: true}
:
capture(捕獲)
當我們設定capture
為false時,事件監聽會會在冒泡階段(由內而外)觸發,如果是true則轉為捕獲階段(由外往內)
設定capture :false,當點擊橘色的div時
會監聽到的class順序為three ⇒ two⇒ one
設定capture :true,當點擊橘色的div時
會監聽到的class順序為one ⇒ two⇒ three
once: true
當設定once為true時,監聽只會觸發一次
*e.stopPropagation()
會中止冒泡事件,只觸發當前監聽到的元素*